package cn.net.api;
/**本类用于对象测试==与equlas的区别*/
public class Test{
    public static void main(String[] args) {
        //创建有参对象
        Person p1 = new Person("凹凸曼",16);
        Person p2 = new Person("凹凸曼",16);

        System.out.println(p1 == p2);//false,new了两个对象,p1和p2保存的地址值不同
        System.out.println(p1.name == p2.name);//true,name是String类型,保存在常量池中,值是同一个
        System.out.println(p1.age == p2.age);//true,age是int基本类型,保存的值都是18

        //第一次测试:结果false,使用的是Object默认的逻辑,也是用==来比较的
        //第二次测试:结果true,重写equals()后,就会使用子类重写后的功能,也就是说此时比较的不再是地址,而是[类型&属性值]
        System.out.println(p1.equals(p2));//true
    }
}

//1.创建Person类
class Person {
    String name;
    int age;

    public Person() {
        System.out.println("我是手动添加的无参构造");
    }
    public Person(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    //需求:比较两个对象的属性值,如果属性值都一样,就是"同一个对象",要求equals返回true
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Person other = (Person) obj;
        if (age != other.age)
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }

}

